// 引入fs模块
const fs = require("fs");

delFile("./testToDel")
  .then(() => {
    console.log("删除成功！");
  })
  .catch((err) => {
    console.log(err);
  });

// 传入path
function delFile(path) {
  // 返回一个promise对象
  return new Promise((resolve, reject) => {
    // 获得path的信息方便判断是否为文件
    fs.stat(path, (err, data) => {
      // 如果出现错误则reject
      if (err) reject(err);
      else {
        if (data.isFile()) {
          //如果是文件直接删除
          delF(path, reject, resolve);
        } else {
          //如果是目录则两个分支，判断为空或不为空
          fs.readdir(path, (err, data) => {
            if (err) reject(err);
            else {
              // 为空
              if (data.length === 0) {
                //直接删除
                delEmp(path, reject, resolve);
              } else {
                // 递归删除
                let promises = data.map((item) => {
                  var newPath = path + "/" + item;
                  return delFile(newPath);
                });

                // 最后删除父文件夹
                Promise.all(promises)
                  .then(() => {
                    //直接删除
                    delEmp(path, reject, resolve);
                  })
                  .catch((err) => {
                    reject(err);
                  });
              }
            }
          });
        }
      }
    });
  });
}

// 删除空文件夹函数
function delEmp(path, fai, suc) {
  fs.rmdir(path, (err) => {
    if (err) fai(err);
    else suc();
  });
}
// 删除文件函数
function delF(path, fai, suc) {
  fs.unlink(path, (err) => {
    if (err) fai(err);
    else suc();
  });
}
